home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / djscan / djscan.ctl next >
Text File  |  1998-11-22  |  7KB  |  242 lines

  1. VERSION 5.00
  2. Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
  3. Begin VB.UserControl DJScan 
  4.    ClientHeight    =   1470
  5.    ClientLeft      =   0
  6.    ClientTop       =   0
  7.    ClientWidth     =   2730
  8.    ScaleHeight     =   1470
  9.    ScaleWidth      =   2730
  10.    ToolboxBitmap   =   "DJScan.ctx":0000
  11.    Begin VB.TextBox txtOpen 
  12.       Height          =   330
  13.       Left            =   45
  14.       Locked          =   -1  'True
  15.       TabIndex        =   1
  16.       TabStop         =   0   'False
  17.       Text            =   "Click here to load app for scan"
  18.       Top             =   30
  19.       Width           =   2400
  20.    End
  21.    Begin VB.ListBox lstDepend 
  22.       Height          =   840
  23.       ItemData        =   "DJScan.ctx":0312
  24.       Left            =   855
  25.       List            =   "DJScan.ctx":0314
  26.       TabIndex        =   0
  27.       Top             =   435
  28.       Width           =   1605
  29.    End
  30.    Begin MSComDlg.CommonDialog CommonDialog1 
  31.       Left            =   165
  32.       Top             =   795
  33.       _ExtentX        =   847
  34.       _ExtentY        =   847
  35.       _Version        =   393216
  36.    End
  37. End
  38. Attribute VB_Name = "DJScan"
  39. Attribute VB_GlobalNameSpace = False
  40. Attribute VB_Creatable = True
  41. Attribute VB_PredeclaredId = False
  42. Attribute VB_Exposed = True
  43. Option Explicit
  44. Private mstrPath As String
  45.  
  46. Public Sub OpenFile()
  47. Attribute OpenFile.VB_Description = "Open Win32 application from within code. Bypasses user click."
  48.   Dim strfile As String
  49.   On Error GoTo errHandle
  50.   
  51.   With CommonDialog1
  52.     .Filter = "*.*"
  53.     .CancelError = True
  54.     .Flags = cdlOFNNoChangeDir + cdlOFNExplorer _
  55.       + cdlOFNHideReadOnly
  56.     If Len(mstrPath) > 0 Then .InitDir = mstrPath
  57.     .ShowOpen
  58.  
  59.     mstrPath = fixPath(.FileName)
  60.     strfile = .FileName
  61.   End With
  62.   Close
  63.   txtOpen = strfile
  64.   Call FindDependants(strfile)
  65.  
  66. Exit_Here:
  67.   Exit Sub
  68. errHandle:
  69.   MsgBox Err.Description, , "DJScan: OpenFile"
  70.   Resume Exit_Here
  71. End Sub
  72. Private Function fixPath(strX As String) As String
  73.   Dim strY As String
  74.   Do
  75.     strY = Right$(strX, 1)
  76.     strX = Left$(strX, Len(strX) - 1)
  77.   Loop Until strY = "\"
  78.   fixPath = strX & strY
  79. End Function
  80.  
  81. Private Sub txtOpen_Click()
  82.   Call OpenFile
  83. End Sub
  84.  
  85. 'Load property values from storage
  86. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  87.   UserControl.Enabled = PropBag.ReadProperty("Enabled", True)
  88. End Sub
  89.  
  90. 'Write property values to storage
  91. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  92.   Call PropBag.WriteProperty("Enabled", UserControl.Enabled, True)
  93. End Sub
  94.  
  95. Private Sub UserControl_Resize()
  96.   Dim intW As Integer
  97.   
  98.   On Error Resume Next
  99.   intW = UserControl.Width
  100.   With txtOpen
  101.     .Move 0, 0, intW
  102.     lstDepend.Move 0, .Height, _
  103.     intW, UserControl.Height - .Height
  104.   End With
  105. End Sub
  106.  
  107. Private Function CountPages(FileName As String) As Long
  108.   On Error GoTo errHandle
  109.   Dim lngX As Long
  110.   Open FileName For Random As #1 Len = 258
  111.     lngX = LOF(1) / 256
  112.   Close
  113.   CountPages = lngX
  114.  
  115. Exit_Here:
  116.   Exit Function
  117. errHandle:
  118.   MsgBox Err.Description, , "DJScan: CountPages"
  119.   Stop
  120. End Function
  121.  
  122. Public Sub FindDependants(FileName As String)
  123. Attribute FindDependants.VB_Description = "Identify all dependencies of a given Win32 application"
  124.   Dim lngP As Long
  125.   Dim lngMax As Long
  126.   Dim strPage As String * 256
  127.   On Error GoTo errHandle
  128.   
  129.   UserControl.MousePointer = vbHourglass
  130.   lngMax = CountPages(FileName)
  131.   lstDepend.Clear
  132.   Open FileName For Random As #1 Len = 256
  133.     For lngP = 1 To lngMax
  134.       Get 1, lngP, strPage
  135.       Call SearchPage(strPage, lngP, ".DLL")
  136.       Call SearchPage(strPage, lngP, ".OCX")
  137.       DoEvents
  138.     Next
  139.   Close
  140.   If lstDepend.ListCount = 0 Then
  141.     lstDepend.AddItem "No DLL or OCX dependents found"
  142.   End If
  143.   UserControl.MousePointer = vbDefault
  144.  
  145. Exit_Here:
  146.   Exit Sub
  147. errHandle:
  148.   MsgBox Err.Description, , "DJScan: FindDependants"
  149. End Sub
  150.  
  151. Private Sub SearchPage(Page As String, PageNum As Long, _
  152. SearchFor As String)
  153.   Dim intC As Integer
  154.   Dim strX As String
  155.   Dim strP As String
  156.   Dim strPage As String * 256
  157.   On Error GoTo errHandle
  158.   
  159.   intC = InStr(UCase(Page), SearchFor)
  160.   If intC > 0 Then
  161.     strX = GetDepName(Page, intC)
  162.     If intC < 16 And Right(strX, 1) = "?" Then
  163.       If PageNum > 1 Then
  164.         Get 1, PageNum - 1, strPage
  165.         strP = GetDepName(strPage, 256)
  166.       End If
  167.       strX = strP & Left(strX, Len(strX) - 1)
  168.     End If
  169.     If Not Duplicate(strX) Then
  170.       If Len(strX) < 6 Then strX = strX & "?"
  171.       lstDepend.AddItem strX
  172.     End If
  173.   End If
  174.  
  175. Exit_Here:
  176.   Exit Sub
  177. errHandle:
  178.   MsgBox Err.Description, , "DJScan: Searchpage"
  179. End Sub
  180. Private Function Duplicate(Check As String) As Boolean
  181.   Dim intX As Integer
  182.  
  183.   With lstDepend
  184.     For intX = 0 To .ListCount - 1
  185.       If .List(intX) = Check Then
  186.         Duplicate = True
  187.         Exit Function
  188.       End If
  189.     Next
  190.   End With
  191.   Duplicate = False
  192. End Function
  193.  
  194. Private Function GetDepName(Page As String, Place As Integer) As String
  195.   Dim strX As String
  196.   Dim strC As String
  197.   Dim intX As Integer
  198.   On Error GoTo errHandle
  199.   
  200.   strX = UCase("_abcdefghijklmnopqrstuvwxyz.-0123456789")
  201.   strC = Mid(Page, Place - intX, 1)
  202.   Do Until (InStr(strX, UCase(strC)) = 0) Or (Place - intX < 1)
  203.     intX = intX + 1
  204.     If Place - intX < 1 Then Exit Do
  205.     strC = Mid(Page, Place - intX, 1)
  206.   Loop
  207.   GetDepName = Mid(Page, Place - (intX - 1), intX + 3)
  208.   If Place - intX < 1 Then
  209.     GetDepName = GetDepName & "?"
  210.     'mark return string for search in previous page
  211.   End If
  212. Exit_Here:
  213.   Exit Function
  214. errHandle:
  215.   MsgBox Err.Description, , "DJScan: GetDepName"
  216. End Function
  217. Public Function GetList() As String
  218. Attribute GetList.VB_Description = "Return list of dependents found."
  219.   Dim intX As Integer
  220.   Dim strX As String
  221.   
  222.   With lstDepend
  223.     For intX = 0 To .ListCount - 1
  224.       strX = strX & .List(intX) & vbCrLf
  225.     Next
  226.   End With
  227.   GetList = strX
  228. End Function
  229.  
  230. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  231. 'MappingInfo=UserControl,UserControl,-1,Enabled
  232. Public Property Get Enabled() As Boolean
  233. Attribute Enabled.VB_Description = "Sets/returns enabled status of control"
  234.   Enabled = UserControl.Enabled
  235. End Property
  236.  
  237. Public Property Let Enabled(ByVal New_Enabled As Boolean)
  238.   UserControl.Enabled() = New_Enabled
  239.   PropertyChanged "Enabled"
  240. End Property
  241.  
  242.